/******************************************************************************* * Copyright (c) 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.ui.internal.e4.migration; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.IMemento; import org.eclipse.ui.internal.IWorkbenchConstants; import org.eclipse.ui.internal.e4.migration.InfoReader.PageReader; import org.eclipse.ui.internal.e4.migration.InfoReader.PartState; public class PerspectiveReader extends MementoReader { private DescriptorReader descriptor; public PerspectiveReader(IMemento memento) { super(memento); } String getId() { return getDescriptor().getId(); } String getLabel() { return getDescriptor().getLabel(); } private DescriptorReader getDescriptor() { if (descriptor == null) { IMemento desriptorMem = getChild(IWorkbenchConstants.TAG_DESCRIPTOR); if (desriptorMem == null) { throw new NullPointerException("Perspective descriptor not found"); //$NON-NLS-1$ } descriptor = new DescriptorReader(desriptorMem); } return descriptor; } List<InfoReader> getInfos() { IMemento[] infoMems = getInfoMems(); List<InfoReader> infos = new ArrayList<>(infoMems.length); for (IMemento infoMem : infoMems) { infos.add(new InfoReader(infoMem)); } return infos; } private IMemento[] getInfoMems() { IMemento[] infoMems = null; IMemento layout = getLayout(); if (layout != null) { IMemento mainWindow = layout.getChild(IWorkbenchConstants.TAG_MAIN_WINDOW); if (mainWindow != null) { infoMems = mainWindow.getChildren(IWorkbenchConstants.TAG_INFO); } } if (infoMems == null) { infoMems = new IMemento[0]; } return infoMems; } Map<String, ViewLayoutReader> getViewLayouts() { IMemento[] viewLayoutMems = getChildren(IWorkbenchConstants.TAG_VIEW_LAYOUT_REC); Map<String, ViewLayoutReader> viewLayouts = new HashMap<>(viewLayoutMems.length); for (IMemento memento : viewLayoutMems) { ViewLayoutReader viewLayout = new ViewLayoutReader(memento); viewLayouts.put(viewLayout.getViewId(), viewLayout); } return viewLayouts; } private IMemento getLayout() { return getChild(IWorkbenchConstants.TAG_LAYOUT); } List<String> getPerspectiveShortcutIds() { return getChildrenIds(IWorkbenchConstants.TAG_PERSPECTIVE_ACTION); } List<String> getActionSetIds() { return getChildrenIds(IWorkbenchConstants.TAG_ALWAYS_ON_ACTION_SET); } List<String> getShowViewActionIds() { return getChildrenIds(IWorkbenchConstants.TAG_SHOW_VIEW_ACTION); } List<String> getNewWizardActionIds() { return getChildrenIds(IWorkbenchConstants.TAG_NEW_WIZARD_ACTION); } List<String> getRenderedViewIds() { List<String> viewIds = getChildrenIds(IWorkbenchConstants.TAG_VIEW); viewIds.addAll(getFastViewIds()); return viewIds; } /** * @return map of fast view bar's ID and side */ Map<String, Integer> getFastViewBars() { Map<String, Integer> bars = new HashMap<>(); for (IMemento bar : getFastViewBarMems()) { bars.put(bar.getString(IWorkbenchConstants.TAG_ID), bar.getInteger(IWorkbenchConstants.TAG_FAST_VIEW_SIDE)); } return bars; } private List<String> getFastViewIds() { List<String> fastViewIds = new ArrayList<>(); IMemento fastViews = getChild(IWorkbenchConstants.TAG_FAST_VIEWS); if (fastViews != null) { for (IMemento view : fastViews.getChildren(IWorkbenchConstants.TAG_VIEW)) { fastViewIds.add(view.getString(IWorkbenchConstants.TAG_ID)); } } IMemento[] fastViewBarArr = getFastViewBarMems(); for (IMemento fastViewBar : fastViewBarArr) { IMemento fastViewsInBar = fastViewBar.getChild(IWorkbenchConstants.TAG_FAST_VIEWS); if (fastViewsInBar != null) { for (IMemento view : fastViewsInBar.getChildren(IWorkbenchConstants.TAG_VIEW)) { fastViewIds.add(view.getString(IWorkbenchConstants.TAG_ID)); } } } return fastViewIds; } List<String> getDefaultFastViewBarViewIds() { List<String> fastViewIds = new ArrayList<>(); IMemento fastViews = getChild(IWorkbenchConstants.TAG_FAST_VIEWS); if (fastViews != null) { for (IMemento view : fastViews.getChildren(IWorkbenchConstants.TAG_VIEW)) { fastViewIds.add(view.getString(IWorkbenchConstants.TAG_ID)); } } return fastViewIds; } private IMemento[] getFastViewBarMems() { IMemento[] emptyArr = new IMemento[0]; IMemento fastViewBars = getChild(IWorkbenchConstants.TAG_FAST_VIEW_BARS); if (fastViewBars == null) { return emptyArr; } IMemento[] fastViewBarArr = fastViewBars.getChildren(IWorkbenchConstants.TAG_FAST_VIEW_BAR); return fastViewBarArr == null ? emptyArr : fastViewBarArr; } List<String> getHiddenMenuItemIds() { return getChildrenIds(IWorkbenchConstants.TAG_HIDE_MENU); } List<String> getHiddenToolbarItemIds() { return getChildrenIds(IWorkbenchConstants.TAG_HIDE_TOOLBAR); } private List<String> getChildrenIds(String tag) { IMemento[] idMemArr = getChildren(tag); List<String> idList = new ArrayList<>(idMemArr.length); for (IMemento idMem : idMemArr) { idList.add(idMem.getString(IWorkbenchConstants.TAG_ID)); } return idList; } List<DetachedWindowReader> getDetachedWindows() { List<DetachedWindowReader> readers = new ArrayList<>(); IMemento layout = getLayout(); if (layout != null) { IMemento[] mems = layout.getChildren(IWorkbenchConstants.TAG_DETACHED_WINDOW); for (IMemento mem : mems) { readers.add(new DetachedWindowReader(mem)); } } return readers; } boolean isCustom() { return getDescriptor().isCustom(); } String getBasicPerspectiveId() { return getDescriptor().getBasicPerspectiveId(); } String getOriginalId() { return getDescriptor().getOriginalId(); } boolean isEditorAreaVisible() { return Integer.valueOf(1).equals(getInteger(IWorkbenchConstants.TAG_AREA_VISIBLE)); } PartState getEditorAreaState() { PartState state = PartState.RESTORED; int value = getInteger(IWorkbenchConstants.TAG_AREA_TRIM_STATE); switch (value) { case 0: case 4: // minimized by zoom state = PartState.MINIMIZED; break; case 1: state = PartState.MAXIMIZED; break; } return state; } static class DetachedWindowReader extends MementoReader { private DetachedWindowReader(IMemento memento) { super(memento); } Rectangle getBounds() { Rectangle windowBounds = new Rectangle(0, 0, 0, 0); Integer bigInt = getInteger(IWorkbenchConstants.TAG_X); windowBounds.x = bigInt == null ? 0 : bigInt.intValue(); bigInt = getInteger(IWorkbenchConstants.TAG_Y); windowBounds.y = bigInt == null ? 0 : bigInt.intValue(); bigInt = getInteger(IWorkbenchConstants.TAG_WIDTH); windowBounds.width = bigInt == null ? 0 : bigInt.intValue(); bigInt = getInteger(IWorkbenchConstants.TAG_HEIGHT); windowBounds.height = bigInt == null ? 0 : bigInt.intValue(); return windowBounds; } String getActivePageId() { String activePageId = null; IMemento folder = getFolder(); if (folder != null) { activePageId = folder.getString(IWorkbenchConstants.TAG_ACTIVE_PAGE_ID); } return activePageId; } List<PageReader> getPages() { IMemento folder = getFolder(); List<PageReader> pages = new ArrayList<>(); if (folder != null) { IMemento[] pageMems = folder.getChildren(IWorkbenchConstants.TAG_PAGE); for (IMemento pageMem : pageMems) { pages.add(new PageReader(pageMem)); } } return pages; } private IMemento getFolder() { return getChild(IWorkbenchConstants.TAG_FOLDER); } } private static class DescriptorReader extends MementoReader { private static final String TAG_DESCRIPTOR = IWorkbenchConstants.TAG_DESCRIPTOR; DescriptorReader(IMemento memento) { super(memento); } String getId() { String id = getOriginalId(); if (isCustom()) { id = getBasicPerspectiveId() + "." + id; //$NON-NLS-1$ } return id; } String getOriginalId() { String id = getString(IWorkbenchConstants.TAG_ID); if (id == null) { throw new NullPointerException("Perspective ID not found"); //$NON-NLS-1$ } return id; } boolean isCustom() { return contains(TAG_DESCRIPTOR); } String getBasicPerspectiveId() { String id = getString(TAG_DESCRIPTOR); if (id == null) { throw new NullPointerException("Basic perspective ID not found"); //$NON-NLS-1$ } return id; } String getLabel() { return getString(IWorkbenchConstants.TAG_LABEL); } } static class ViewLayoutReader extends MementoReader { private ViewLayoutReader(IMemento memento) { super(memento); } String getViewId() { return getString(IWorkbenchConstants.TAG_ID); } boolean isCloseable() { return getBoolean(IWorkbenchConstants.TAG_CLOSEABLE, true); } boolean isStandalone() { return getBoolean(IWorkbenchConstants.TAG_STANDALONE); } } }